﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Sicoagro.Models;
using System.ServiceModel;
using System.Net;
using System.IO;
using System.Web.Script.Serialization;


namespace Sicoagro.Controllers
{
    public class ContratanteController : Controller
    {
        WSFContratante.ContratantesClient proxy = new WSFContratante.ContratantesClient();

        private List<Contratante> CrearContratantes()
        {
            List<Contratante> contratantes = new List<Contratante>();
            //contratantes.Add(new Contratante() { CodContratante = 1, TipoDocContratante = "DNI", NumDocContratante = "42059130", EmailContratante = "info@lavaggi.com.pe", UsuarioContratante = "adminLavaggi", ClaveContratante = "123456", RazonSocial = "LAVAGGI S.A.C.", DepContratante = "Lima", ProvContratante = "Lima", DistContratante = "Ate", DirecContratante = "Av. Separadora Industrial 4567", NumTelefContratante = "4657890", StdRegistro = 0 });
            //contratantes.Add(new Contratante() { CodContratante = 2, TipoDocContratante = "RUC", NumDocContratante = "20456789902", EmailContratante = "info@alicorp.com.pe", UsuarioContratante = "alicorp", ClaveContratante = "alicorp", RazonSocial = "ALICORP S.A", DepContratante = "Lima", ProvContratante = "Lima", DistContratante = "Cercado de Lima", DirecContratante = "Av. Uruguay 2356", NumTelefContratante = "3451245", StdRegistro = 0 });
            return contratantes;
        }

        private void ListarDepartamentos()
        {
            string url = "http://localhost:15256/Ubigeo.svc/ubigeo";
            HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
            req.Method = "GET";
            HttpWebResponse res = null;

            res = (HttpWebResponse)req.GetResponse();
            StreamReader reader = new StreamReader(res.GetResponseStream());
            string departamentoJson = reader.ReadToEnd();
            JavaScriptSerializer js = new JavaScriptSerializer();
            List<Departamento> resultado = js.Deserialize<List<Departamento>>(departamentoJson);

            ViewData["listaDepartamentos"] = resultado;
        }

        


        private void ListarProvincias(string departamento)
        {
            string url = "http://localhost:15256/Ubigeo.svc/ubigeo/" + departamento;
            HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
            req.Method = "GET";
            HttpWebResponse res = null;

            res = (HttpWebResponse)req.GetResponse();
            StreamReader reader = new StreamReader(res.GetResponseStream());
            string provinciaJson = reader.ReadToEnd();
            JavaScriptSerializer js = new JavaScriptSerializer();
            List<Provincia> resultado = js.Deserialize<List<Provincia>>(provinciaJson);

            ViewData["listaProvincias"] = resultado;
        }

        private void ListarDistritos(string departamento, string provincia)
        {
            string url = "http://localhost:15256/Ubigeo.svc/ubigeo/" + departamento + "," + provincia;
            HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
            req.Method = "GET";
            HttpWebResponse res = null;

            res = (HttpWebResponse)req.GetResponse();
            StreamReader reader = new StreamReader(res.GetResponseStream());
            string distritoJson = reader.ReadToEnd();
            JavaScriptSerializer js = new JavaScriptSerializer();
            List<Distrito> resultado = js.Deserialize<List<Distrito>>(distritoJson);

            ViewData["listaDistritos"] = resultado;
        }

        private Contratante ObtenerContratante(int cod)
        {
            List<Contratante> contratantes = (List<Contratante>)Session["contratantes"];
            Contratante model = contratantes.Single(delegate(Contratante contratante)
            {
                if (contratante.CodContratante == cod) return true;
                else return false;
            });
            return model;

        }
        //
        // GET: /Contratante/
        public ActionResult Index()
        {
            if (ModelState.IsValid)
            {
                return Redirect("/");
            }
            /*if (Session["contratantes"] == null)
                Session["contratantes"] = CrearContratantes();*/

            List<Contratante> model = (List<Contratante>)Session["contratantes"];
            foreach (var item in proxy.ListarContratante())
            {
                model.Add(new Contratante { CodContratante = item.Codigo, TipoDocContratante = item.DocIdentidad, NumDocContratante = item.NumDocumento, EmailContratante = item.EMail, UsuarioContratante = item.Usuario, ClaveContratante = item.Password, RazonSocial = item.Razon_Social, DepContratante = item.Departamento, ProvContratante = item.Provincia, DistContratante = item.Distrito, DirecContratante = item.Direccion, NumTelefContratante = item.Telefono });

            }
            return View(model);
        }
        //
        // GET: /Contratante/Details/5
        public ActionResult Details(int id)
        {
            Contratante model = ObtenerContratante(id);
            return View(model);
        }

        //
        // GET: /Contratante/Create

        public ActionResult Create(string dpto,string prov)
        {
            string departamento = "0";
            string provincia = "0";
            string distrito = "0";


            if (dpto == null || dpto == "")
                departamento = "0";
            else
                departamento = dpto;

            if (prov == null || prov == "")
                provincia = "0";
            else
                provincia = prov;


            ViewData["provincia"] = provincia;
            ViewData["distrito"] = distrito;
            ViewData["departamento"] = departamento;
            this.ListarDepartamentos();

            if (departamento != "0")
                this.ListarProvincias(departamento);

            if (provincia != "0")
                this.ListarDistritos(departamento, provincia);
            return View();
        }


        
         //POST: /Contratante/Create
        [HttpPost]
        public ActionResult Create(FormCollection collection)
        {
            try
            {
                //if (Session["contratantes"] == null)
                //    Response.Write("No se encuentra el estado de sesion.");
                //List<Contratante> contratantes = (List<Contratante>)Session["contratantes"];
                string TipoDocContratante = Request.Form["depTipoDocSelect"];
                string NumDocContratante = collection["NumDocContratante"];
                string EmailContratante = collection["EmailContratante"];
                string UsuarioContratante = collection["UsuarioContratante"];
                string ClaveContratante = collection["ClaveContratante"];
                string RazonSocial = collection["RazonSocial"];
                string DepContratante = Request.Form["departamento"];
                string ProvContratante = Request.Form["provincia"];
                string DistContratante = Request.Form["distrito"];
                string DirecContratante = collection["DirecContratante"];
                string NumTelefContratante = collection["NumTelefContratante"];
                proxy.CrearContratante(TipoDocContratante, NumDocContratante, EmailContratante, UsuarioContratante, ClaveContratante, RazonSocial, DepContratante, ProvContratante, DistContratante, DirecContratante, NumTelefContratante);
                int c = proxy.ListarContratante().Count() - 1;
                int cod = proxy.ListarContratante().ElementAt(c).Codigo;
                return RedirectToAction("Edit", new { id = cod });

            }
            catch (FaultException ex)
            {
                string errmsg = ex.Message;
                Response.Write("<Script> alert('" + errmsg + "')</script>");
                //Response.Write(ex.Detail.Message);
                return View();
            }
        }

        //
        // GET: /Contratante/Edit/5
        public ActionResult Edit(int id, string dpto, string prov)
        {
            string departamento = "0";
            string provincia = "0";
            string distrito = "0";


            if (dpto == null || dpto == "")
                departamento = "0";
            else
                departamento = dpto;

            if (prov == null || prov == "")
                provincia = "0";
            else
                provincia = prov;


            ViewData["provincia"] = provincia;
            ViewData["distrito"] = distrito;
            ViewData["departamento"] = departamento;
            this.ListarDepartamentos();

            if (departamento != "0")
                this.ListarProvincias(departamento);

            if (provincia != "0")
                this.ListarDistritos(departamento, provincia);
            return View(proxy.ObtenerContratante(id));
        }

        //
        // POST: /Contratante/Edit/5

        [HttpPost]
        public ActionResult Edit(int id, FormCollection collection)
        {
            WSFContratante.ContratantesClient proxy = new WSFContratante.ContratantesClient();
            try
            {
                //if (Session["contratantes"] == null)
                //    Response.Write("No se encuentra el estado de sesion.");
                //List<Contratante> contratantes = (List<Contratante>)Session["contratantes"];
                string DocIdentidad = collection["depTipoDocSelect"];
                string NumDocumento = collection["NumDocContratante"];
                string EMail = collection["EmailContratante"];
                string Usuario = collection["UsuarioContratante"];
                string Password = collection["ClaveContratante"];
                string Razon_Social = collection["RazonSocial"];
                string Departamento = collection["depSelect"];
                string Provincia = collection["provSelect"];
                string Distrito = collection["distSelect"];
                string Direccion = collection["DirecContratante"];
                string Telefono = collection["NumTelefContratante"];

                proxy.ModificarContratante(DocIdentidad, NumDocumento, EMail, Usuario, Password, Razon_Social, Departamento, Provincia, Distrito, Direccion, Telefono, 0, "");
                return RedirectToAction("Index");
            }
            catch
            {
                return View();
            }
        }

        //
        // GET: /Contratante/Delete/5
        public ActionResult Delete(int id)
        {
            Contratante model = ObtenerContratante(id);
            return View(model);
        }

        //
        // POST: /Contratante/Delete/5
        [HttpPost]
        public ActionResult Delete(int id, FormCollection collection)
        {
            try
            {
                List<Contratante> contratantes = (List<Contratante>)Session["contratantes"];
                contratantes.Remove(ObtenerContratante(id));

                return RedirectToAction("Index");
            }
            catch
            {
                return View();
            }
        }
    }
}